#!/bin/bash

declare -r EXIT_SUCCESS="0"
declare -r EXIT_ERROR="1"

declare -r PENDING_COMPONENT_FW="/usr/bin/install-pending-fw.py"
declare -r FW_UPGRADE_SCRIPT="/usr/bin/mlnx-fw-upgrade.sh"
declare -r SYSFS_PWR_CYCLE="/sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/pwr_cycle"

FORCE_REBOOT="no"

function ParseArguments() {
    while [ $# -ge 1 ]; do
        case "$1" in
            -f|--force)
                FORCE_REBOOT="yes"
            ;;
        esac
        shift
    done
}

function SafePwrCycle() {
    sync ; sync
    umount -fa > /dev/null 2&>1
    echo 1 > $SYSFS_PWR_CYCLE
    sleep 3
    echo 0 > $SYSFS_PWR_CYCLE
}

ParseArguments "$@"

${FW_UPGRADE_SCRIPT} --upgrade --verbose
EXIT_CODE="$?"
if [[ "${EXIT_CODE}" != "${EXIT_SUCCESS}" ]]; then
    echo "Failed to burn MLNX FW: errno=${EXIT_CODE}"

    if [[ "${FORCE_REBOOT}" != "yes" ]]; then
        echo "Reboot is interrupted: use -f|--force to override"
        exit "${EXIT_ERROR}"
    fi
fi

${PENDING_COMPONENT_FW}

SafePwrCycle
